<?php
namespace App\Http\Controllers;

use App\Student;
use Illuminate\Support\Facades\DB;

class StudentController extends Controller
{
    public function test1()
    {

//        return 'test1';

        //添加数据
//        $bool = DB::insert('insert into student(name,age) values(?,?)',['naihe',19]);
//        var_dump($bool);

        //修改数据
//        $num = DB::update('update student set age = ? where name = ?',[20,'sean']);
//        var_dump($num);

        //查看数据
//        $students = DB::select('select * from student where id > 1');
//        var_dump($students);
//        dd($students);

        //删除数据
//        $num = DB::delete('delete from student where id > ?',[1]);
//        dd($num);
    }
   //查询构造器添加数据
    public function query1()
    {
        //构造器 插入
//        $bool = DB::table('student')->insert(
//            ['name'=>'小乔','age'=> 22]
//        );
//        dd($bool);

        //返回插入的id
//        $id = DB::table('student')->insertGetId(
//            ['name'=>'熙珍','age'=> 23]
//        );
//        dd($id);

        //插入多条数据
        $bool = DB::table('student')->insert([
            ['name'=>'小虾米','age'=> 22],
            ['name'=>'麻小十三少虾哥','age'=> 32]
        ]);
        dd($bool);
    }

    //查询构造器更新数据
    public function query2()
    {
        //跟新数据
//        $num = DB::table('student')->where('id',10)
//                                   ->update(['age'=>30]);
//        dd($num);

        //自增
//        $num = DB::table('student')->increment('age',3);
//        $num = DB::table('student')->where('id',10)
//                                   ->increment('age',3);
        //自减
//        $num = DB::table('student')->decrement('age',3);
        $num = DB::table('student')->where('id',9)
                                   ->crement('age',1,['name'=>'小虾米']);
        dd($num);
    }

    //查询构造器删除数据
    public function query3()
    {
//        $num = DB::table('student')->where('id',6)
//                                   ->delete();
//        dd($num);

        //清空数据表不返回任何数据
//        DB::table('student')->truncate();
    }

    //查询构造器查询数据
    public function query4()
    {
        //get()获取表的所有数据
//        $students = DB::table('student')->get();
//        dd($students);

        //first获取结果集中的第一条数据
//        $student = DB::table('student')->first();
//        $student = DB::table('student')->orderBy('id','desc')->first();
//        dd($student);

        //where
//        $students = DB::table('student')->where('id', '>=', 4)->get();
        //多条件查询
//        $students = DB::table('student')->whereRaw('id >= ? AND age > ?',[4,28])->get();
//        dd($students);

        //pluck 指定显示的字段
//        $students = DB::table('student')->pluck('name');
        //符合条件的人的名字
//        $students = DB::table('student')->whereRaw('id >= ? AND age > ?',[4,28])->pluck('name');
//        dd($students);

        //lists 和pluck差不多可以指定某个字段作为键(id) 注意 字段的值不能重复 否则会被下面的相同值覆盖掉
//        $students = DB::table('student')->lists('name','id');
//        dd($students);

        //select 查询想要的多个字段
//        $students = DB::table('student')->select('id','name','age')
//                                        ->get();
//        dd($students);

        //chunk 查询时候 分段获取数据 减轻服务器的压力
        DB::table('student')->chunk(3,function($students){
            echo '<pre>';
            var_dump($students);
//            if(条件满足){
//               return false;
//            }
        });
    }

    //聚合函数
    public function  query5()
    {
//        $count = DB::table('student')->count();
//        $max = DB::table('student')->max('age');
//        $min = DB::table('student')->min('age');
//        $sum = DB::table('student')->sum('age');
//        $avg = DB::table('student')->avg('age');
//        dd($avg);
    }

    public function orm1()
    {
        //all()
//        $students = Student::all();//查询所有的数据
//        $student = Student::find(1);//查询一条数据
//        $studentt = Student::findOrFail(14);//查询不到疏浚报错 无赖
//        echo '<pre>';
//        var_dump($studentt);

        //查询构造器
//        $students = Student::get();
//        $students = Student::whereRaw('id > ? AND age > ?',[1,25])
//            ->orderBy('id','desc')
//            ->first();
//        dd($students);

        //chunk
//        echo '<pre>';
//        Student::chunk(2,function($students){
//            var_dump($students);
//        });

        //聚合函数
        $count = Student::count();
        $avg = Student::where('id','>',1)->avg('age');
        dd($avg);
    }

    public function  orm2()
    {
        //使用模型新增数据
//        $student = new Student();
//        $student->name = '杰森哥';
//        $student->age = '27';
//        $bool = $student->save();
//        dd($bool);
//        $student = Student::find(18);
//        echo $student->created_at;

        //使用模型create方法添加数据
//        $student = Student::create([
//           'name'=>'小光','age'=>'19'
//        ]);
//        dd($student);

        // firstOrCreate以属性查找用户如果没有则新增并取得新的实例
//        $student = Student::firstOrCreate(
//            ['name'=>'杰森哥1']
//        );
//        dd($student);
        // firstOrNew 以属性查找用户若没有则创建新的实例 需要保存自己调用save()
        $student = Student::firstOrNew(
            ['name'=>'杰森哥11']
        );
        $bool = $student->save();
        dd($bool);
    }

    //orm的更新
    public function orm3()
    {
        //通过模型更新一条数据
//        $student = Student::find(21);
//        $student->name = '天亮了';
//        $student->age = '12';
//        $bool = $student->save();
//        dd($bool);

        //通过模型批量更新数据
        $num = Student::where('id','>',19)->update(
            ['name'=>'kitty']
        );
        dd($num);
    }

    public  function orm4()
    {
        //通过模型删除
//        $student =Student::find(21);
//        $bool = $student->delete();
//        dd($bool);
        //通过主键删除
//        $num = Student::destroy(20);
//        $num = Student::destroy(18,19);
        //批量删除
//        $num = Student::where('id','>',7)->delete();
//        dd($num);
    }
}